package com.unifiedsearch.utils.exceptionHandler;


import com.unifiedsearch.utils.vo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice//对加了controller注解的方法进行拦截处理 AOP的实现
@Slf4j
public class GlobalExceptionHandler
{
    @ExceptionHandler(Exception.class) //指定什么异常执行这个方法
    @ResponseBody //为了返回给前端数据
    public Result error(Exception e)
    {
        e.printStackTrace();
        return Result.fail().message("执行了全局异常处理");
    }

    //Runtime异常
    @ExceptionHandler(RuntimeException.class)
    @ResponseBody
    public Result error(RuntimeException e)
    {
        e.printStackTrace();
        return Result.fail().message(e.getMessage());
    }

    //特定异常
    @ExceptionHandler(ArithmeticException.class)
    @ResponseBody
    public Result error(ArithmeticException e)
    {
        e.printStackTrace();
        return Result.fail().message(e.getMessage());
    }

    //自定义异常
    /**
     * 1.自定义异常HospitalException
     * 2.在统一异常类添加规则
     * 3.在controller中执行该异常
     * @param e
     * @return
     */
    @ExceptionHandler(ServiceException.class)
    @ResponseBody
    public Result error(ServiceException e)
    {
       e.printStackTrace();
       log.error(e.getMessage());
       return Result.fail().code(e.getCode()).message(e.getMsg());
    }

    //自定义异常
    /**
     * 1.自定义异常JWTException
     * 2.在统一异常类添加规则
     * 3.在controller中执行该异常
     * @param e
     * @return
     */
    @ExceptionHandler(JWTException.class)
    @ResponseBody
    public Result error(JWTException e)
    {
        e.printStackTrace();
        log.error(e.getMessage());
        return Result.fail().code(e.getCode()).message("token有误！");
    }
}
